HTTP是 Stateless(沒有狀態) 的通訊協定(Protocol),Stateless(沒有狀態)含有以下特色:
也就是說,每次頁面載入彼此之間都沒有關係。但...這樣太沒感情了!!(不是啦!),這樣有時候其實不太方便。
為了蝦皮雙十一積了半年的購物車,如果從購物車頁面跳轉到結帳頁面,它就像失憶了一樣,完全不記得你的購物車內容!!!!!瞬間是不是非常崩潰!!!!
那有哪些方式可以儲存資訊,讓頁面間彼此共享?
本文將為大家介紹Application、Session、Cookie、Cache以及ViewState。
==============================================================
共用
的,全域變數的概念,因此可以用來存放少量經常使用,但不會因為使用者不同而變更的資料
。Application.Lock();//先把Application固定
Application["yoyo"]="大家都看得到這段字喔!";//對Application賦值
Application.UnLock();//把Application打開
string yoyo =Convert.ToString( Application["yoyo"]);//存取時要記得轉型
==============================================================
同一瀏覽器只是關掉分頁Session不會消失
,換頁面也不會消失,故類似跨網頁的全域變數Session["yoyo"]="Hiyoyo";//賦值Session["yoyo"]
Session.Timeout = 30;//更改Session過期時間
Session.Remove("yoyo");//移除 Session["yoyo"]的值
Session.RemoveAll();//移除所有Session變數
Session.Clear(); //移除所有Session變數
Session.Abandon();//移除 session 的所有變數,且會觸發 Session_End 事件,把 Session["yoyo"]整個砍了
你可以試試把值存到Session以及Application,然後開啟不同瀏覽器看看畫面變化喔~
==============================================================
HttpCookie yoCookie = new HttpCookie("test");//用new宣告一個型別為HttpCookie的yocookie
yoCookie.Value = Server.UrlEncode("我是內容");//通常寫入cookie的值會加密,所以加密後賦值
yoCookie.Expires = DateTime.Now.AddDays(2);//設定2天後過期
Response.Cookies.Add(yoCookie);//寫到用戶端
HttpCookie readCookie = Request.Cookies["test"];//用request讀取
Response.Write("cookie內容 : " + Server.UrlDecode(readCookie.Value));
也可以在單一cookie中儲存多的名稱/值組。增加設定方便性以及減少cookie的數量及大小
//方法一
Response.Cookies["test"]["username"] = "I'm Cynthia";
Response.Cookies["test"]["gender"] = "女";
//方法二
HttpCookie yoCookie = new HttpCookie("test");
yoCookie.Values["username"] = "I'm Cynthia";
yoCookie.Values["gender"] = "女";
==============================================================
-範例:
當有一個入口網站,內容不會頻繁變動,但是頁面上有許多資訊需要從資料庫抓取,每個人點進來就要重新抓取並載入一次,其實非常消耗流量跟資源。於是我們將輸出結果存到Cache裡,並設定6小時或合適的時間。當第一個人進到頁面時,(被迫)佛心的幫大家把結果載完並存到cache,接下來6個小時內進來這個頁面的人都不用重新載入就能看到跟第一個人一模一樣的頁面。一直到6小時時間到,下一個人再繼續扮演(被迫)佛心的好孩子。有客怨也只有第一個人會抱怨呵呵
//存放資訊
Cache["yoyo"] = "1000";
//存放資訊
Cache.Insert("yoyo", "1000");
//讀取資訊
String UserNameID = Cache["yoyo"].ToString();
==============================================================
介紹
<input Type="Hidden"...>
相關語法
ViewState["Text"] = "123";//賦值
string myValue = ViewState["Text"].ToString();//取值
==============================================================
變數 | 變數儲存位置 | 生命週期 | 資料量大小 | |
---|---|---|---|---|
Application | 所有瀏覽者共用同一個 | 伺服器記憶體 | 不關伺服器就一直存在 | 任意 |
Session | 一個瀏覽器一個 | 伺服器記憶體 | 關掉瀏覽器就消失(關掉分頁不會)。也可設定存活時間(預設為20分鐘) | 小量 |
Cookie | 一個瀏覽者一個 | 使用者電腦 | 通常存在1000分鐘,也可以自己設時間 | 小量 |
Page.Cache | 所有瀏覽者在同一時間共用同一個 | 伺服器記憶體 | 自己設定時間,時間到消失,不受網頁關閉或關機影響 | 任意 |
ViewState | 一個頁面(aspx)同一個 | 用戶端 | 該頁面的生命週期 | 小量 |
==============================================================
阿母!!!!!!!!!我終於完成了!!!!!!!!!!!!!!!!!!!!!!!!!!(尖叫)
這30天比想像中還要難熬阿阿阿阿
寫到這篇完全要跪著感謝小朱大大的指教及分享,真的受益良多QQ每次收到留言通知都是既期待又怕受傷害XDD
還有YoChen大大總是能發現我文章的小錯誤超厲害XD
還有優悠大大也是我的除錯恩人XD
以及其他留言分享知識還有學習資源給我的大大們!
最後還有我最愛的團隊夥伴們!!!每天一起加油打氣互相督促文章,這三十天大家都一起完賽了!!我們好棒!
透過撰寫這系列的文章,去翻了很多書跟文章,雖然自己非本科,很多底層的文章還是不太能理解,但對於基礎紮實度的提升的確自己都很有感,這種感覺真好=ˇ=
學習的路還很長,希望可以離各位大大越來越近=)!
團隊學習進度目前進行到以ASP.NET Web Form寫出一個留言板、使用ADO.NET串接資料庫資料,接下來要試著製作團隊內使用的自評系統,預計兩周後開始學習MVC,歡迎大家一起交流~~
==============================================================
[ASP.NET]ViewState、Session、Cookies、Application State比較
[.NET] ASP.NET 狀態管理(State Management):ViewState
Application, Session, Cookie, Viewstate, Cache物件用法和區別
91之ASP.NET由淺入深 不負責講座 Day3 - ViewState
Session、Cache、Cookie、ViewState簡略說明
[ASP.NET] Application、Cookie、Session和Cache
書籍:
ASP.NET專題實務I--C#入門實戰(VS 2015版)
教材:
ASP.NET 網頁程式設計
ASP.NET Web Form > MVC,個人是覺得可以直接MVC,當然先學 ASP.NET Web Form 有個基礎也好!
最後恭喜三十天了!
感謝你~~~
你的文章寫得很棒
內容紮實,又有自己的想法
最後恭喜完賽
三十天真的不容易 ((遠目 Σ( ° △ °|||)
謝謝你希望趕快加入業界跟各位前輩學習新年快樂!
請問大大,Session 可以跨IP傳遞嗎?
小弟現在寫個功能是跨系統(IP不同)登入,A系統登入後如果超連結到B系統,A系統的登入資料傳送給B系統,小弟使用Session在本機和測試機(測試機環境是AB系統都在同IP裡但Port不同)都可以,但上傳正式機後就無法使用(AB系統IP不同),還是大大有其他推薦的方式呢???
感謝!
感謝大大提供的文章,看到您提到自己非本科系相關,但卻可以寫出這麼詳細的文章,而且還是鐵人競賽,本科系出身的我真的都感到慚愧,文章內容看的出來相當詳細,內容也很豐富,只是身為 C# 這個語言入門小菜雞的我來說,有些基礎的方法和變數都要先去轉換一下
因為學校主要必修的語言是Java,而前幾個禮拜才剛透過去年某位大大的文章,完成了簡單的Spring 三層式架構的後端程式,以玉X金控的技術試題來練習,因為我被退貨了
然後因為現在即將入職工作需要,開始看一下C# 語法 (有一些和Java好像有點類似)
但是ASP.Net 架構的部分就有點讓我暈頭轉向
即使如此還是可以感覺到文章內容的深度和豐富度
希望未來我能夠完全看的到大大文章的所有內容
感謝大大分享的這系列文章
另外我也發現你們團隊出的文章剛好都符合我的需要
在此也感謝你們提供這些可以初步了解、自學的文章~